/**
 *  Copyright (c) 2007 - 2009 Adobe
 *  All rights reserved.
 *
 *  Permission is hereby granted, free of charge, to any person obtaining
 *  a copy of this software and associated documentation files (the "Software"),
 *  to deal in the Software without restriction, including without limitation
 *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
 *  and/or sell copies of the Software, and to permit persons to whom the
 *  Software is furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included
 *  in all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 *  IN THE SOFTWARE.
 */
package com.adobe.txi.todo.domain
{
    import mx.collections.ArrayCollection;
    import mx.utils.ObjectUtil;

    public class TodoModel
    {
        [Bindable]
        [Publish(objectId="todos")]
        public var todos:ArrayCollection;

        [Bindable]
        [PublishSubscribe(objectId="currentTodoItem")]
        public var currentTodoItem:TodoItem;
		
    	private var _savedCurrentTodoItem:Object;

		public function backupCurrentTodoItem():void
		{
			_savedCurrentTodoItem=ObjectUtil.copy(currentTodoItem);
		}
		
		public function get savedCurentTodoItem():Object
		{
			return _savedCurrentTodoItem;
		}
		
		public function rollbackCurrentTodoItem():void
		{
			if(!_savedCurrentTodoItem)
			{
				return;
			}
			
			if (currentTodoItem.isNew())
			{
				todos.removeItemAt(todos.getItemIndex(currentTodoItem))

				currentTodoItem=null;
			}
			else
			{
				if(savedCurentTodoItem)
				{
					currentTodoItem.title=_savedCurrentTodoItem.title;
				}
			}
		}

        public function deleteItem(todo:TodoItem):void
        {
			if(todos)
			{
	            todos.removeItemAt(todos.getItemIndex(todo));
			}
        }

        public function createNewTodoItem():TodoItem
        {
			var newItem:TodoItem;
			
			if(todos)
			{
				newItem = new TodoItem();	
				todos.addItem(newItem);
			}

            return newItem;
        }
    }
}